home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Magazin: Amiga-CD 1996 March
/
Amiga-CD 1996 #3.iso
/
pd-software
/
mui_3.1
/
developer
/
oberon
/
txt
/
muisupport.mod
< prev
next >
Wrap
Text File
|
1996-01-19
|
10KB
|
335 lines
(*------------------------------------------
:Module. MuiSupport.mod
:Author. Albert Weinert [awn]
:Address. Krähenweg 21 , 50829 Köln, Germany
:EMail. Usenet_> aweinert@darkness.gun.de
:EMail. Z-Netz_> A.WEINERT@DARKNESS.ZER
:Phone. 0221 / 580 29 84
:Revision. $Revision: 1.2 $
:Date. $Date: 1993/09/15 17:31:16 $
:Copyright. Albert Weinert
:Language. Oberon-2
:Translator. Amiga Oberon 3.00d
:Contents. Eine Nützliche Mui Prozeduren und Hooks.
:Imports. <Importiertes, Name/ShortCut des Autors>
:Remarks. <Was Du willst, evtl. Usage>
:Bugs. <Bekannte Fehler>
:Usage. <Angaben zur Anwendung>
:RCSId. $Id: MuiSupport.mod,v 1.2 1993/09/15 17:31:16 A_Weinert Exp A_Weinert $
:History.
$Log: MuiSupport.mod,v $
# Revision 1.2 1993/09/15 17:31:16 A_Weinert
# PopupString geändert, nun wird keine CallBack mehr für an das Poup Object
# gehängt (muss von hand gemacht werden, ist flexibler). Und LabelPopupString()
# erstellt, dieses erstellt vor der Eingabezeile noch ein Label.
#
# Revision 1.1 1993/09/13 21:20:39 A_Weinert
# Initial revision
#
--------------------------------------------*)
MODULE MuiSupport;
IMPORT m := Mui,
Strings,
e := Exec,
u := Utility,
y := SYSTEM,
mb := MuiBasics;
PROCEDURE LimitInteger*( hook : mb.Hook; obj : m.Object; args : mb.Args ):LONGINT;
(*------------------------------------------
:Input. obj = Zu überprüfendes String-Objekt
:Input. args = minValue, maxValue, DestObject, DestAttr
:Output. 0
:Semantic. Überprüft den Wert eine Integer-String-Objektes ob er in dem
:Semantic. Bereich von "minValue" und "MaxValue" liegt, wenn ein "DestObject"
:Semantic. angegeben ist dann wird dem Objekt über das "DestAttr" den
:Semantic. aktuellen Wert übergeben.
:Note. Wenn man nur den Bereich überprüfen will, so muss als DestObject
:Note. ein NIL übergeben werden.
:Update. 06-Sep-1993 [awn] - erstellt.
--------------------------------------------*)
TYPE arg = STRUCT ( foo : mb.ArgsDesc);
min : LONGINT;
max : LONGINT;
object : m.Object;
attribute : LONGINT;
END;
VAR value : LONGINT;
BEGIN
mb.Get( obj, m.aStringInteger, value );
IF value < args(arg).min THEN value := args(arg).min;
ELSIF value > args(arg).max THEN value := args(arg).max END;
mb.Set( obj, m.aStringInteger, value );
IF args(arg).object # NIL THEN
mb.Set( args(arg).object, args(arg).attribute, value );
END;
RETURN 0;
END LimitInteger;
PROCEDURE HorizDash*();
(*------------------------------------------
:Semantic. Erstellt eine Horizontale Trennlinie
:Note.
:Update. 06-Sep-1993 [awn] - erstellt.
--------------------------------------------*)
BEGIN
mb.RectangleObject;
mb.TextFrame;
mb.TagItem( m.aInnerTop, 0 );
mb.TagItem( m.aInnerBottom, 0 );
mb.TagItem( m.aVertWeight, 0 );
mb.end ;
END HorizDash;
PROCEDURE VertDash*();
(*------------------------------------------
:Semantic. Erstellt eine Vertikale Trennlinie
:Note.
:Update. 06-Sep-1993 [awn] - erstellt.
--------------------------------------------*)
BEGIN
mb.RectangleObject;
mb.TextFrame;
mb.TagItem( m.aInnerLeft, 0 );
mb.TagItem( m.aInnerRight, 0 );
mb.TagItem( m.aHorizWeight, 0 );
mb.end ;
END VertDash;
PROCEDURE KeyButton*( s : ARRAY OF CHAR ): m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
RETURN mb.KeyButton( s, key );
END KeyButton;
PROCEDURE UpperKeyButton*( s : ARRAY OF CHAR ): m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToUpper( s[pos] );
END;
RETURN mb.KeyButton( s, key );
END UpperKeyButton;
PROCEDURE KeyCheckMark*( s : ARRAY OF CHAR; checked : BOOLEAN ): m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
mb.keyLabel1( s, key );
mb.Child; RETURN mb.KeyCheckMark( checked, key );
END KeyCheckMark;
PROCEDURE KeyLabelString*( s : ARRAY OF CHAR; maxLen : LONGINT): m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
mb.keyLabel2( s, key );
mb.Child; mb.StringObject( m.aControlChar, ORD( key ),
m.aStringMaxLen, maxLen,
m.aFrame, m.vFrameString,
u.end);
RETURN mb.End();
END KeyLabelString;
PROCEDURE KeyLabel*( s : ARRAY OF CHAR; what : LONGINT );
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
CASE what OF
| 0 : mb.keyLabel( s, key );
| 1 : mb.keyLabel1( s, key );
| 2 : mb.keyLabel2( s, key );
ELSE HALT (20) END;
END KeyLabel;
PROCEDURE ImageButton*( img : LONGINT ):m.Object;
BEGIN
mb.ImageObject;
mb.ImageButtonFrame;
mb.Tags( m.aImageSpec, img,
m.aImageFontMatchWidth, e.true,
m.aImageFreeVert, e.true,
m.aInputMode, m.vInputModeRelVerify,
u.end );
RETURN mb.End();
END ImageButton;
PROCEDURE PopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; img : LONGINT ):m.Object;
VAR pos : LONGINT;
key : CHAR;
str : m.Object;
dummy : m.Object;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
mb.HGroup; mb.GroupSpacing( 1 );
mb.Child; mb.StringObject( m.aControlChar, ORD( key ),
m.aStringMaxLen, maxLen,
m.aFrame, m.vFrameString,
u.end);
str := mb.End();
mb.Child; dummy := ImageButton( img );
mb.end;
RETURN str;
END PopupString;
PROCEDURE LabelPopupString*( s : ARRAY OF CHAR; maxLen : LONGINT; img : LONGINT ):m.Object;
(*------------------------------------------
:Input. s : Zeichenkette die vor der Eingabezeile stehen soll
:Input. hook : Hook welcher ausgeführt werden soll, wenn das Popup Objekt gedrückt wurde
:Output. StringObject
:Semantic.
:Note.
:Update. 14-Sep-1993 [awn] - erstellt.
--------------------------------------------*)
VAR pos : LONGINT;
s2 : ARRAY 64 OF CHAR;
key : CHAR;
BEGIN
COPY (s, s2 );
pos := Strings.Occurs( s2, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s2, pos, 1 );
key := u.ToLower( s2[pos] );
END;
mb.keyLabel( s2, key ); mb.Child; RETURN PopupString( s, maxLen, img );
END LabelPopupString;
PROCEDURE LabelCycle*( s : ARRAY OF CHAR; entries : e.APTR ):m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
mb.keyLabel( s, key ); mb.Child; RETURN mb.KeyCycle( entries,key );
END LabelCycle;
PROCEDURE CheckMarkString*( s : ARRAY OF CHAR ):m.Object;
VAR obj : m.Object;
pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
Strings.Delete( s, pos, 1 );
key := u.ToLower( s[pos] );
END;
mb.HGroup;
mb.Child; obj := mb.KeyCheckMark( FALSE, key );
mb.Child; mb.TextObject( m.aTextContents, y.ADR( s ),
m.aTextHiChar, ORD( key ),
u.end );
mb.end;
mb.end;
RETURN obj;
END CheckMarkString;
PROCEDURE Slider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
VAR pos : LONGINT;
key : CHAR;
BEGIN
pos := Strings.Occurs( s, "_" );
IF pos = -1 THEN
key := "\o";
ELSE
key := u.ToLower( s[pos] );
END;
RETURN mb.KeySlider( min, max, 0, key );
END Slider;
PROCEDURE LabelSlider*( s : ARRAY OF CHAR; min, max : LONGINT ):m.Object;
BEGIN
KeyLabel( s, 1 ); mb.Child; RETURN Slider( s, min, max );
END LabelSlider;
PROCEDURE ListDown*( list : m.Object );
VAR max, act : LONGINT;
BEGIN
mb.Get( list, m.aListEntries, max );
mb.Get( list, m.aListActive, act );
IF act < (max-1) THEN
m.DoMethod( list, m.mListExchange, act, act+1 );
mb.Set( list, m.aListActive, act+1 );
END;
END ListDown;
PROCEDURE ListUp*( list : m.Object );
VAR act : LONGINT;
BEGIN
mb.Get( list, m.aListActive, act );
IF act > 0 THEN
m.DoMethod( list, m.mListExchange, act, act-1 );
mb.Set( list, m.aListActive, act-1 );
END;
END ListUp;
PROCEDURE ListRemove*( list : m.Object );
BEGIN
m.DoMethod( list, m.mListRemove, m.vListRemoveActive );
END ListRemove;
END MuiSupport.